package javabean.MerchantInfo;

import cn.hutool.core.annotation.Alias;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;

@Data
@ApiModel(description = "银行卡信息")
public class CardInfo {

    @Alias("card_type")
    @ApiModelProperty(value = "银行账户类型【0：对公账户 1：对私法人账户 2：对私非法人账户 示例值：0】", required = true)
    @NotBlank(message = "cardType不能为空")
    @Length(min = 1, max = 1, message = "cardType 长度范围：1~1")
    private String cardType;

    @Alias("card_name")
    @ApiModelProperty(value = "银行账户名【示例值：上海汇付支付有限公司;当card_type=0时填写企业名称，企业非同名时，需要在extended_material_list中额外上传非同名结算证明材料，文件枚举：F516;当card_type=1时填写法人姓名，对私法人银行账户名与法人姓名必需一致；;当card_type=2时填写非法人姓名】", required = true)
    @NotBlank(message = "cardName不能为空")
    @Length(min = 1, max = 128, message = "cardName 长度范围：1~128")
    private String cardName;

    @Alias("card_no")
    @ApiModelProperty(value = "银行账号【示例值：98140008801800008888;注意：系统会验证卡号所属银行，请准确填写；】", required = true)
    @NotBlank(message = "cardNo不能为空")
    @Length(min = 1, max = 32, message = "cardNo 长度范围：1~32")
    private String cardNo;

    @Alias("prov_id")
    @ApiModelProperty(value = "银行所在省【参考地区编码；示例值：310000；如修改省市要级联修改】", required = false)
    @Length(min = 1, max = 6, message = "provId 长度范围：1~6")
    private String provId;

    @Alias("area_id")
    @ApiModelProperty(value = "银行所在市【参考地区编码；示例值：310100；如修改省市要级联修改】", required = true)
    @NotBlank(message = "areaId不能为空")
    @Length(min = 1, max = 6, message = "areaId 长度范围：1~6")
    private String areaId;

    @Alias("bank_code")
    @ApiModelProperty(value = "银行编码【当card_type=0时必填；参考： 银行编码；示例值：01020000；】", required = false)
    @Length(min = 1, max = 8, message = "bankCode 长度范围：1~8")
    private String bankCode;

    @Alias("branch_code")
    @ApiModelProperty(value = "联行号【当card_type=0时必填，参考：银行支行编码 当card_type=0时必填， 当card_type=1或2时非必填;示例值：102290026507】", required = false)
    @Length(min = 1, max = 12, message = "branchCode 长度范围：1~12")
    private String branchCode;

    @Alias("cert_type")
    @ApiModelProperty(value = "持卡人证件类型【持卡人证件类型，参见《自然人证件类型》。;当card_type=0时为空， 当card_type=1或2时必填； 示例值：00;持卡人证件类型04、11需要补充 F101【结算人】港澳台居民来往内地通行证;持卡人证件类型13需要补充 F513【结算人】外国人居留证;持卡人证件类型14、15需要补充 F514【结算人】港澳台居住证;其它持卡人证件类型补充F102【结算人】其它证件材料;补充材料填写在extended_material_list 扩展资料包中】", required = false)
    @Length(min = 1, max = 2, message = "certType 长度范围：1~2")
    private String certType;

    @Alias("cert_no")
    @ApiModelProperty(value = "持卡人证件号码【对私必填；年龄不小于18岁且不能大于80岁；如持卡人证件类型为00：身份证，则填写身份证号码 ；;示例值：310112200001018888】", required = false)
    @Length(min = 1, max = 32, message = "certNo 长度范围：1~32")
    private String certNo;

    @Alias("cert_validity_type")
    @ApiModelProperty(value = "持卡人证件有效期类型【1:长期有效 0:非长期有效；示例值：0】", required = false)
    @Length(min = 1, max = 1, message = "certValidityType 长度范围：1~1")
    private String certValidityType;

    @Alias("cert_begin_date")
    @ApiModelProperty(value = "持卡人证件有效期开始日期【日期格式：yyyyMMdd，示例值：20220125】", required = false)
    @Length(min = 1, max = 8, message = "certBeginDate 长度范围：1~8")
    private String certBeginDate;

    @Alias("cert_end_date")
    @ApiModelProperty(value = "持卡人证件有效期截止日期【日期格式：yyyyMMdd，示例值：20220125;当cert_validity_type=0时必填；当cert_validity_type=1时为空】", required = false)
    @Length(min = 1, max = 8, message = "certEndDate 长度范围：1~8")
    private String certEndDate;

    @Alias("mp")
    @ApiModelProperty(value = "银行卡绑定手机号【11位数字，开通全域资金管理功能必填； 示例值：18611111111】", required = false)
    @Length(min = 1, max = 11, message = "mp 长度范围：1~11")
    private String mp;

    @Alias("is_settle_default")
    @ApiModelProperty(value = "默认结算卡标志【是否为默认结算卡标志；Y:是 N:否(为空默认)；示例值：Y】", required = false)
    @Length(min = 1, max = 1, message = "isSettleDefault 长度范围：1~1")
    private String isSettleDefault;

}